<?php
/*
 * Model là tầng xử lý những tác vụ liên quan đến tương tác cơ sở dữ liệu từ những yêu cầu của controller. 
 * Model xử lý và trả về kết quả dưới dạng một mảng dữ liệu, 
 * khi đó thông qua view ta sẽ đẩy nội dung của mảng dữ liệu ấy ra bên ngoài. 
 * Việc tách biệt tầng model có rất nhiều thuận lợi, trước là dễ quản lý sau là dễ nâng cấp và phát triển trong tương lai của mã nguồn.
 */

/*
 * Vì tất cả các file nằm trong thư mục Model nên áp dụng theo cơ chế lazy loading ta có quy tắc định nghĩa: Model_Tênfile. 
 * Cụ thể ở đây file User.php, nên lớp của tôi định nghĩa sẽ là Model_User.
Lưu ý là thư mục Models của chúng ta có s, nhưng khi định nghĩa thì chúng ta bỏ qua s và 
viết bình thường là Model.
 */


/*
 * neu su dung câu truy vấn đơn giản, ta có thể sử dụng Zend_Db_Table để lấy giá trị , luc nay can ke thua Zend_Db_Table_Abstract
 * 
 * với các câu truy vấn phức tạp đòi hỏi phải kết bảng, xử lý nhiều, thì việc dùng cách tương tác Zend_Db lại là sử lựa chọn hiệu quả nhất, luc nay ko can ke thua class Zend_Db_Table_Abstract 
 * 
 * Duoi day dung ket hop ca 2 
 * 
 * 
 */

class Model_User extends Zend_Db_Table_Abstract{
	
	protected $_name="user"; //ten bang
	protected $_primary="id"; //ten khoa chinh
	//dung Zend_Db
	protected $db;
	
	
	public function __construct(){
		//dung Zend_Db ket hop voi Zend_Db_Table thi phahi co parent::__construct();   Neu ko dung ket hop thi ko can dong nay
		parent::__construct();
		$this->db=Zend_Registry::get('db');
	}
	
	
	/*Ở đây zend framework sử dụng cơ chế Active Record. 
	 * Nên phương thức $this->fetchall() nó tương đương với cú pháp lặp toàn bộ dữ liệu từ câu truy vấn select * from user vậy.
	*/
	public function listall1(){
		return $this->fetchall()->toArray();
	}
	
	//dung Zend_Db_Table
	public function listuser()
	{
		// thực hiện các thao tác liệt kê dữ liệu đầy đủ và chi tiết
		$query=$this->select();
		//$data->from('tên_bảng',array('cột 1','cột 2')); 
		$query->from('user',array('username','id'));
		$query->where('id > ?',0);
		$query->order('username DESC');
		//$query->limit(3);
		//$data=$this->fetchAll($query);   //neu dung dang nay se print ra toan bo object
		$data=$this->fetchAll($query)->toArray();  //dung dang nay se chi print ra ket qua select
		return $data;
	}  
	
	
	//cach dung Zend_Db_Table
    public function listall(){
    	echo "dung Zend_Db_Table listall";
        $query=$this->select();
        //$query->where('level =?','2');
        return $this->fetchAll($query)->toArray();
    }   
    
    
    
    //cach dung Zend_Db
    public function listall2(){
    	echo "dung Zend_Db list all2";
    	$sql=$this->db->query("select * from user where level='1' order by id DESC");
    	return $sql->fetchAll();  //dung dang $this->db  thi ko can toArray
    }
    
    public function listall3(){
    	$query=$this->select();
    	$query->from($this->_name,array('id','username','level'));
    	return $query;
    }
    
    //Lấy tất cả dữ liệu từ table user
    public function listuser4(){
    	$cache = Zend_Registry::get(‘cache’);      
    	if(!$data = $cache->load("listuser4")) {
    		$select = $this->select()->order('id DESC');
    		$data =  $this->fetchall($select)->toArray();
    		echo "ko co cache";
    		$cache->save($data, "listuser4");
    	} 
    	return $data;
    }

    
    
    
}




